package top.xiaoazi.futureletterserver.utils;

import jakarta.mail.internet.MimeMessage;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
@Component
public class EmailUtils {
    protected static final String HOST = "smtp.qq.com"; //服务器

    protected static final int PORT = 465; //端口号

    protected static final String USERNAME = "zlcode.top@foxmail.com"; // 邮箱发送人

    protected static final String PASSWORD = "ffojijjylzbkbfgf"; // 授权码
    // 上面内容不用了

    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String from;// 发件人

    // 判断是否是有效的邮箱
    private final String EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";

    private final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);
    // 判断是否是有效的邮箱方法
    public boolean isValidEmail(String email) {
        if (email == null) {
            return false;
        }
        Matcher matcher = EMAIL_PATTERN.matcher(email);
        return matcher.matches();
    }

    // 邮箱模板
    /**
     * 默认模板
     * @param message 发送的消息
     * @return
     */
    public String getDefaultEmailTemplate(String message) {
        return """
                <body>
                    <style>
                        .logo {
                            color: rgb(251, 83, 83);
                        }
                        .gap {
                            border-bottom: 1px solid #dcdfe6;
                            margin-bottom: 30px;
                        }
                        .gap-tow {
                            height: 15px;
                        }
                        span {
                            font-weight: 700;
                        }
                        .near {
                            line-height: 5px;
                
                        }
                        .bottom {
                            color: #a7a7a8;
                            font-size: 14px;
                
                        }
                        .code {
                            color: rgb(251, 83, 83);
                        }
                    </style>
                    <h2 class="logo">ZLCode</h2>
                    <div class="gap"></div>
                    <h2>感谢你对 ZLCode 的支持。</h2>
                    <p>
                        %s
                    </p>
                    <p>如需帮助, 或任何疑问 请联系技术支持(QQ): 623847465</p>
                    <div class="gap-tow"></div>
                    <p class="near"><span>ZLCode</span> 团队</p>
                    <div class="gap-tow"></div>
                    <div class="gap"></div>
                    <p class="bottom">(该邮件由 ZLCode 账号安全服务系统自动发送, 请勿直接回复.)</p>
                </body>
                """.formatted(message);
    }

    /**
     * 发送纯文本的邮件
     * @param to 收件人，可变参数
     * @param subject 主题
     * @param content 内容
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendGeneralEmail(String subject, String content, String... to){
        /// 创建一个邮件消息
        MimeMessage message = javaMailSender.createMimeMessage();

        // 创建 MimeMessageHelper
        MimeMessageHelper helper = new MimeMessageHelper(message, false);

        // 发件人邮箱和名称
        helper.setFrom(from);
        // 收件人邮箱
        helper.setTo(to);
        // 邮件标题
        helper.setSubject(subject);
        // 邮件正文，第二个参数表示是否是HTML正文
//        helper.setText("Hello <strong> World</strong>！", true);
        helper.setText(content);

        // 发送
        javaMailSender.send(message);

        return true;
    }

    /**
     * 发送HTML的邮件
     * @param to 收件人，可变参数
     * @param subject 主题
     * @param content 内容
     * @return 是否成功
     */
    @SneakyThrows(Exception.class)
    public boolean sendHtmlEmail(String subject, String content, String... to){
        // 创建一个邮件消息
        MimeMessage message = javaMailSender.createMimeMessage();

        // 创建 MimeMessageHelper
        MimeMessageHelper helper = new MimeMessageHelper(message, false);

        // 发件人邮箱和名称
        helper.setFrom(from);
        // 收件人邮箱
        helper.setTo(to);
        // 邮件标题
        helper.setSubject(subject);
        // 邮件正文，第二个参数表示是否是HTML正文
        helper.setText(content, true);
        // 发送
        javaMailSender.send(message);
        return true;
    }
}
